.Dd $Mdocdate: February 23 2015 $
.Dt BN_CTX_START 3
.Os
.Sh NAME
.Nm BN_CTX_start ,
.Nm BN_CTX_get ,
.Nm BN_CTX_end
.Nd use temporary BIGNUM variables
.Sh SYNOPSIS
.In openssl/bn.h
.Ft void
.Fo BN_CTX_start
.Fa "BN_CTX *ctx"
.Fc
.Ft BIGNUM *
.Fo BN_CTX_get
.Fa "BN_CTX *ctx"
.Fc
.Ft void
.Fo BN_CTX_end
.Fa "BN_CTX *ctx"
.Fc
.Sh DESCRIPTION
These functions are used to obtain temporary
.Vt BIGNUM
variables from a
.Vt BN_CTX
(which can been created by using
.Xr BN_CTX_new 3 )
in order to save the overhead of repeatedly creating and freeing
.Vt BIGNUM Ns s
in functions that are called from inside a loop.
.Pp
A function must call
.Fn BN_CTX_start
first.
Then,
.Fn BN_CTX_get
may be called repeatedly to obtain temporary
.Vt BIGNUM Ns s.
All
.Fn BN_CTX_get
calls must be made before calling any other functions that use the
.Fa ctx
as an argument.
.Pp
Finally,
.Fn BN_CTX_end
must be called before returning from the function.
When
.Fn BN_CTX_end
is called, the
.Vt BIGNUM
pointers obtained from
.Fn BN_CTX_get
become invalid.
.Sh RETURN VALUES
.Fn BN_CTX_start
and
.Fn BN_CTX_end
return no values.
.Pp
.Fn BN_CTX_get
returns a pointer to the
.Vt BIGNUM ,
or
.Dv NULL
on error.
Once
.Fn BN_CTX_get
has failed, the subsequent calls will return
.Dv NULL
as well, so it is sufficient to check the return value of the last
.Fn BN_CTX_get
call.
In case of an error, an error code is set, which can be obtained by
.Xr ERR_get_error 3 .
.Sh SEE ALSO
.Xr BN_CTX_new 3
.Sh HISTORY
.Fn BN_CTX_start ,
.Fn BN_CTX_get ,
and
.Fn BN_CTX_end
were added in OpenSSL 0.9.5.
